﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.Net.Security;

namespace Utility.Net
{
    /// <summary>
    /// Klasa obsługi bezpieczeństwa połączenia z serwerem , musi być zadeklarowana przed wywołaniem połączenia.
    /// Parametr "status" przechowuje inforamcje o bierzącym statusie bezpieczeństwa połączenia.
    /// </summary>
    public class Security
    {
        /// <summary>
        /// Inicjuje sposób weryfikacj certyfikatu serwera
        /// W parametrze "status" przechowuje inforamcje o statusie wywołania serwera
        /// </summary>
        public Security()
        {
            status = "Funkcja sprawdzająca bezpieczeństwo nie została jeszcze wywołana";
            ServicePointManager.ServerCertificateValidationCallback += CheckSSL;
        }

        /// <summary>
        /// Przechowuje informacje o statusie bezpieczeństwa połączenia z serwerem
        /// </summary>
        public string status;


        /// <summary>
        /// Funkcja delegowana do sprawdzania certyfikatu serwera
        /// </summary>
        /// <param name="obSender">Przekazywany wewnętrznie</param>
        /// <param name="certificate">Przekazywany wewnętrznie</param>
        /// <param name="chain">Przekazywany wewnętrznie</param>
        /// <param name="sslPolicyErrors">Przekazywany wewnętrznie</param>
        /// <returns>Pawda lub fałsz , musi tak zostać</returns>
        private bool CheckSSL(Object obSender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
            {
                status = "OK";
                return true;
            }
            else
            {
                status = "Błąd certyfikatu serwera";
                return false;
            }
        }
    }
}
